// JavaScript Document
((function(a){
    //插件本体
    //先考虑公众号的相关功能信息
    var kuoqiweixin = function(opts){
        var ths = this;
		if(!a.kuoqiJs.isWeixin()){
			a.kuoqiJs.error("请在微信体系里面使用本模块");
			return ;
		}
        this.opts = a.kuoqiJs.opts(opts,{
            config_url:'',//获取配置的链接地址
            debug:false,//是否启用调试模式
            //这里是权限列表，默认是全部开通的状态
            jsApiList:[
                "updateAppMessageShareData",
                "updateTimelineShareData",
                //"onMenuShareTimeline",
                //"onMenuShareAppMessage",
                //"onMenuShareQQ",
                "onMenuShareWeibo",
                //"onMenuShareQZone",
                "startRecord",
                "stopRecord",
                "onVoiceRecordEnd",
                "playVoice",
                "pauseVoice",
                "stopVoice",
                "onVoicePlayEnd",
                "uploadVoice",
                "downloadVoice",
                "chooseImage",
                "previewImage",
                "uploadImage",
                "downloadImage",
                "translateVoice",
                "getNetworkType",
                "openLocation",
                "getLocation",
                "hideOptionMenu",
                "showOptionMenu",
                "hideMenuItems",
                "showMenuItems",
                "hideAllNonBaseMenuItem",
                "showAllNonBaseMenuItem",
                "closeWindow",
                "scanQRCode",
                "chooseWXPay",
                "openProductSpecificView",
                "addCard",
                "chooseCard",
                "openCard",
            ]
        });
        this.library = {};
        //初始化模块
        this.init = function(){
            wx.ready(function(){
                // config信息验证后会执行 ready 方法，所有接口调用都必须在 config 接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在 ready 函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在 ready 函数中。
                //这里是正常使用的时候的信息
                ths.share();//初始化分享模块
				ths.initWxopendLaunchWapp();//微信标签自定跳转到微信小程序的那种
				
            });
            wx.error(function(res){
                // config信息验证失败会执行 error 函数，如签名过期导致验证失败，具体错误信息可以打开 config 的debug模式查看，也可以在返回的 res 参数中查看，对于 SPA 可以在这里更新签名。
                console.error(res);
            });
            wx.config({
                debug:ths.opts.debug, // 开启调试模式,调用的所有 api 的返回值会在客户端 alert 出来，若要查看传入的参数，可以在 pc 端打开，参数信息会通过 log 打出，仅在 pc 端时才会打印。
                appId:ths.library.appid, // 必填，公众号的唯一标识
                timestamp:ths.library.timestamp, // 必填，生成签名的时间戳
                nonceStr:ths.library.noncestr, // 必填，生成签名的随机串
                signature:ths.library.sign,// 必填，签名
                jsApiList: ths.opts.jsApiList, // 必填，需要使用的 JS 接口列表
				openTagList:['wx-open-launch-weapp','wx-open-launch-app']
            });
        }
        //启用分享的相关功能
        //当然这个地方用户也可以通过重写本方法进行自定义
		//微信标签自定跳转到微信小程序的那种
		this.initWxopendLaunchWapp = function(){
			/*
				demo:
				<wx-open-launch-weapp id="launch-btn" username="gh_eb45f6754da1" path=""> <!-- replace -->
				<template>
					<button style="width: 200px; height: 45px; text-align: center; font-size: 17px; display: block; margin: 0 auto; padding: 8px 24px; border: none; border-radius: 4px; background-color: #07c160; color:#fff;">打开小程序2</button>
				</template>
			</wx-open-launch-weapp>
			*/
			//在这个模块下面，如果成功就会展示，不成功展示默认的信息
			a.kuoqiJs('wx-open-launch-weapp').each(function(){
				//本标签会提供一个替换的容器，本容器使用[data-ctl=""]作为数据引用，[data-act]作为数据接收
				//如果加载成功，则显示，加载不成功就显示替换内容
				var act = a.kuoqiJs(this).data('ctl');
				this.addEventListener('ready', function (e) {
					//标签开放成功
					//标签开放成功，显示标签内容，否则直接不做任何处理
					//显示当前标签内容的时候需要处理掉已经有的显示内容
					if(act){
						a.kuoqiJs('[data-act="'+act+'"]').hide();
					}
					a.kuoqiJs(this).removeClass("hidden");
				})
				this.addEventListener('launch', function (e) {
					a.kuoqiJs.error('开放标签 success');
				})
				this.addEventListener('error', function (e) {
					a.kuoqiJs.error('开放标签 fail'+e.detail);
				})
			});
		}
        //分享成功返回的信息
        this.onShare = null;//分享成功的返回方法
        this.share = function(){
            var title = a.kuoqiJs('meta[name="wx-share-title"]').attr('content');
            var desc = a.kuoqiJs('meta[name="wx-share-desc"]').attr('content');
            var link = a.kuoqiJs('meta[name="wx-share-link"]').attr('content');
            if(!link){ link = window.location.href;}
            var img = a.kuoqiJs('meta[name="wx-share-img"]').attr('content');
            ths.library.share_title = title;
            ths.library.share_desc = desc;
            ths.library.share_link = link;
            ths.library.share_img = img;
            //自定义“分享给朋友”及“分享到QQ”按钮的分享内容（1.4.0）
            wx.updateAppMessageShareData({
                title: title, // 分享标题
                desc: desc, // 分享描述
                link: link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致
                imgUrl: img, // 分享图标
                success: function () {
                    // 设置成功
                    ths.onShare&&ths.onShare();
                }
            })
            //自定义“分享到朋友圈”及“分享到 QQ 空间”按钮的分享内容（1.4.0）
            wx.updateTimelineShareData({
                title: title, // 分享标题
                link: link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致
                imgUrl: img, // 分享图标
                success: function () {
                    // 设置成功
                    ths.onShare&&ths.onShare();
                }
            })
            //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口（即将废弃）
            // wx.onMenuShareTimeline({
            // 	title: title, // 分享标题
            // 	link: link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致
            // 	imgUrl: img, // 分享图标
            // 	success: function () {
            // 	// 用户点击了分享后执行的回调函数
            // 		ths.onShare&&ths.onShare();
            // 	}
            // }),
            //获取“分享给朋友”按钮点击状态及自定义分享内容接口（即将废弃）
            // wx.onMenuShareAppMessage({
            // 	title: title, // 分享标题
            // 	desc: desc, // 分享描述
            // 	link: link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致
            // 	imgUrl: img, // 分享图标
            // 	success: function () {
            // 	// 用户点击了分享后执行的回调函数
            // 		ths.onShare&&ths.onShare();
            // 	}
            // });
            //获取“分享到QQ”按钮点击状态及自定义分享内容接口（即将废弃）
            // wx.onMenuShareQQ({
            // 	title: title, // 分享标题
            // 	desc: desc, // 分享描述
            // 	link: link, // 分享链接
            // 	imgUrl: img, // 分享图标
            // 	success: function () {
            // 	// 用户确认分享后执行的回调函数
            // 		ths.onShare&&ths.onShare();
            // 	},
            // 	cancel: function () {
            // 	// 用户取消分享后执行的回调函数
            // 	}
            // });
            //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口
            wx.onMenuShareWeibo({
                title: title, // 分享标题
                desc: desc, // 分享描述
                link: link, // 分享链接
                imgUrl: img, // 分享图标
                success: function () {
                    // 用户确认分享后执行的回调函数
                    ths.onShare&&ths.onShare();
                },
                cancel: function () {
                    // 用户取消分享后执行的回调函数
                }
            });
            //获取“分享到 QQ 空间”按钮点击状态及自定义分享内容接口（即将废弃）
            // wx.onMenuShareQZone({
            // 	title: title, // 分享标题
            // 	desc: desc, // 分享描述
            // 	link: link, // 分享链接
            // 	imgUrl: img, // 分享图标
            // 	success: function () {
            // 	// 用户确认分享后执行的回调函数
            // 		ths.onShare&&ths.onShare();
            // 	},
            // 	cancel: function () {
            // 	// 用户取消分享后执行的回调函数
            // 	}
            // });


        }

        //判定为微信之后会自动加载微信的js
        var script = $Q.createElement('script');
        //http://res.wx.qq.com/open/js/jweixin-1.6.0.js
        script.src = window.location.protocol +"//res.wx.qq.com/open/js/jweixin-1.6.0.js";
        script.onload = function(){
            var url = window.location.href;
            a.kuoqiJs.ajax({
                url:ths.opts.config_url,
                type:'post',
                dataType:'json',
                data:{url:url},
                success:function(rs){
                    if(rs.status==1){
                        ths.library.appid = rs.data.appid;
                        ths.library.noncestr = rs.data.noncestr;
                        ths.library.sign = rs.data.sign;
                        ths.library.timestamp = rs.data.timestamp;
                        ths.init();
                    }else{
                        $Q.alert(rs.message);
                    }
                },
                error:function(){
                    $Q.alert("微信配置信息获取失败，微信相关功能将无法正常使用");
                }
            });
        }
        $Q('head').append(script);
    };
    a.kuoqiJs.plugIn.register('Weixin',kuoqiweixin);
})(this))